package com.lanyou.esb.cook.proxy.redis.proxy;

import java.io.IOException;

import redis.clients.jedis.Jedis;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;

/**
 * Redis代理接口
 * 
 * @author Davey.wu
 */
public interface JedisProxy<T> {
	/**
	 * 获取存储数据的键
	 * 
	 * @return
	 */
	String getKey();

	/**
	 * 根据目标对象获取REDIS键
	 * 
	 * @param value
	 *            ：值
	 * @return
	 */
	String getKeyFromObject(T value);

	/**
	 * 获取REDIS键
	 * 
	 * @param field
	 *            ：域名
	 * @return
	 */
	String getKey(String field);

	/**
	 * 获取REDIS键
	 * 
	 * @param fields
	 *            ：域名列表
	 * @return
	 */
	String getKeyFromFields(String... fields);

	/**
	 * 擦除
	 * 
	 * @param jedis
	 *            ：jedis客户端
	 * @return
	 * @throws JsonParseException
	 * @throws JsonMappingException
	 * @throws IOException
	 */
	T erase(Jedis jedis) throws JsonParseException, JsonMappingException,
			IOException;

	/**
	 * 取消擦除
	 * 
	 * @param jedis
	 *            ：jedis客户端
	 * @param value
	 *            ：值
	 * @return
	 * @throws JsonParseException
	 * @throws JsonMappingException
	 * @throws IOException
	 */
	void unErase(Jedis jedis, T value) throws JsonParseException,
			JsonMappingException, IOException;
}
